# utils/DataProvider.py
import random
import time

from utils.YamlUtil import YamlUtil
from utils.MysqlUtil import MysqlUtil
from utils.LogUtil import logger
from faker import Faker

# 所有处理数据的方法
class DataProvider:
    def __init__(self):
        self.yaml_util = YamlUtil()
        self.fk = Faker(locale="zh_CN")

    # 获取转账汇款图片
    def get_transfer_img(self):
        transfer_img = self.yaml_util.read_extract_yaml_data().get("transfer_img")
        if not transfer_img:
            raise ValueError("transfer_img 值未在 extract.yaml 中找到！")
        return transfer_img

    # 获取设置的模型封面图
    def get_fm_cover(self):
        cover = self.yaml_util.read_extract_yaml_data().get("cover")
        if not cover:
            raise ValueError("cover 值未在 extract.yaml 中找到！")
        return cover

    # 获取作品封面
    def get_works_img(self):
        works_img = self.yaml_util.read_extract_yaml_data().get("works_img")
        if not works_img:
            raise ValueError("works_img 值未在 extract.yaml 中找到！")
        return works_img

    # 获取设置作品封面
    def get_works_fm_img(self):
        work_fm_img = self.yaml_util.read_extract_yaml_data().get("works_fm_img")
        if not work_fm_img:
            raise ValueError("work_fm_Img 值未在 extract.yaml 中找到！")
        return work_fm_img

    # 获取模型线框图
    def get_zm_idCard_img(self):
        return self.yaml_util.read_extract_yaml_data()["zm_idCard_img"]

    # 获取模型线框图
    def get_fm_idCard_img(self):
        return self.yaml_util.read_extract_yaml_data()["fm_idCard_img"]

    # 获取模型线框图
    def get_sc_idCard_img(self):
        return self.yaml_util.read_extract_yaml_data()["sc_idCard_img"]

    # 获取模型线框图
    def get_model_xk_img(self):
        return self.yaml_util.read_extract_yaml_data()["model_xk_img"]

    # 获取模型预览图
    def get_model_yl_img(self):
        return self.yaml_util.read_extract_yaml_data()["model_yl_img"]

    # 获取模型附件Md5
    def get_model_pack_md5(self):
        return self.yaml_util.read_extract_yaml_data()["md5"][0]

    # 获取购物车id
    def get_goods_num(self):
        return self.yaml_util.read_extract_yaml_data()["goods_num"]

    # 获取订单号
    def get_tradeNo(self):
        return self.yaml_util.read_extract_yaml_data()["tradeNo"]

    # 获取模型id
    def get_modelId(self):
        return self.yaml_util.read_extract_yaml_data()["modelId"]

    def mysql_query_data(self, database=None, query_sql=None, parms=None):
        """
        mysql查询对应的值
        :param database: 数据库名字
        :param query_sql: sql语句
        :param parms: sql查询出来的结果取值
        :return:
        """
        mysql_util = MysqlUtil(database)
        try:
            # 执行SQL查询
            result = mysql_util.select_data_one(query_sql)[parms]
            if not result:
                logger.error(f"数据库中未找到记录")
                return None
            return result
        except Exception as e:
            logger.error(f"数据库查询时出错: {e}")
            raise

    # 生成随机身份证号
    def generate_id_card(self):
        return self.fk.ssn()

    # 生成随机手机号
    def generate_mobile_phone(self):
        # 生成随机手机号
        mobile_phone = self.fk.phone_number()
        self.yaml_util.write_extract_yaml({"mobile_phone": mobile_phone})
        return mobile_phone

    def get_mobile_phone(self):
        # 从extract.yaml文件中获取手机号
        return self.yaml_util.read_extract_yaml_data()["mobile_phone"]

    def random_user_name(self):
        """生成随机字符串（可自定义字符集）"""
        chars = '''1234567890唐僧原著里是被内定安排好的取经人为达目的可以做很多颠覆三观事情比如插朋友一刀忘恩负义孙悟空是绝对主角受制于心魔全新辅佐又没有太多心机凭借能力闯社会碰壁一圈之后逐渐趋同猪八戒绝对不是蠢材可以说是四个人中心机最重的各种坑师兄告状挖坑可以理解为老猪才是一个理性人沙僧就是一个被抓住把柄的NPC'''
        random_user_name =  ''.join(random.choice(chars) for _ in range(5))
        self.yaml_util.write_extract_yaml({"user_name":random_user_name})
        return random_user_name

    def get_user_name(self):
        # 从extract.yaml文件中获取用户名
        return self.yaml_util.read_extract_yaml_data()["user_name"]

    def get_userId(self):
        # 从extract.yaml文件中获取用户名
        return self.yaml_util.read_extract_yaml_data()["user_name"]

    def get_updatePassToken(self):
        return self.yaml_util.read_extract_yaml_data()["updatePassToken"]

    def countdown(self,seconds=120):
        for i in range(seconds, 0, -1):
            print(f"\r等待验证码发送:{i}秒", end="", flush=True)
            time.sleep(1)

if __name__ == '__main__':
    data = DataProvider().random_user_name()
    print(data)